#include "volume.h"
#include "ui_volume.h"
#include "util.h"
#include <QPoint>

Volume::Volume(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Volume)
{
    ui->setupUi(this);
    this->setWindowFlags(Qt::Popup); // 设置为弹出窗口
    ui->volumeBox->installEventFilter(this);
}

Volume::~Volume()
{
    delete ui;
}

bool Volume::eventFilter(QObject *watched, QEvent *event)
{
    if(watched == ui->volumeBox)
    {
        if(event->type() == QEvent::MouseButtonPress) {
            calcVolume();
        } else if(event->type() == QEvent::MouseButtonRelease) {
            emit setVolume(volumeRatio);
        } else if(event->type() == QEvent::MouseMove) {
            calcVolume();
            emit setVolume(volumeRatio);
        }
        return true;
    }

    return QObject::eventFilter(watched, event);
}

void Volume::calcVolume()
{
    // 获取鼠标点击时的 y 坐标, QCursor().pos()鼠标点击时的位置，该位置是基于屏幕的全局坐标
    int y = ui->volumeBox->mapFromGlobal(QCursor().pos()).y();

    // 验证y的正确性，y的范围在[5, 150]之间
    y = y < 5? 5 : y;
    y = y > 150? 150 : y;

    // 更新outLine的高度
    ui->outLine->setGeometry(ui->outLine->x(), y, ui->outLine->width(), 150 - y);

    // 更新volumeBox的位置
    int volumeBtnY = ui->outLine->y() - ui->volumeBtn->height() / 2;
    // 为了防止当outLine的y坐标为150时，按钮的一半显示不出来的问题
    if(volumeBtnY > 140){
        volumeBtnY = 140;
    }
    ui->volumeBtn->move(ui->volumeBtn->x(), volumeBtnY);

    volumeRatio =  (double)ui->outLine->height() / ui->inLine->height() * 100;
}
